<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>
          Google Web Toolkit
          
            -
            Constants</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<link href="../css/base.css" rel="stylesheet" type="text/css">
<link href="./doc.css" rel="stylesheet" type="text/css">
<link href="../css/print.css" rel="stylesheet" media="print" type="text/css">
</head>
<body>
<div id="gaia">&nbsp;</div>
<div id="header">
<div id="logo">
<a href="http://code.google.com/"><img src="http://code.google.com/images/code_sm.png" alt="Google"></a>
</div>
<div id="title">Google Web Toolkit (Beta)</div>
<div id="breadcrumbs">
<div id="nextprev">
<nobr><a href="com.google.gwt.i18n.client.Dictionary.html">&laquo; prev</a></nobr><nobr><a href="com.google.gwt.i18n.client.ConstantsWithLookup.html">next &raquo;</a></nobr>
</div>
<span class="item"><a href="http://code.google.com/">Google Code Home</a></span>
        &gt;
        <span class="item"><a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a></span>
        &gt;
        
        <span class="item"><a xmlns="" href="gwt.html">GWT Class Reference</a></span> &gt;
            <span class="item"><a href="com.google.gwt.i18n.client.html">com.google.gwt.i18n.client</a></span> &gt;
            <span class="selected item">Constants</span>
</div>
</div>
<div id="side">
<div id="menu">
<h4>
<a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a>
</h4>
<ul>
<li>
<a href="http://code.google.com/webtoolkit/download.html">Download GWT</a>
</li>
</ul>
<ul>
<li>
<a href="http://code.google.com/webtoolkit/overview.html">Product Overview</a>
</li>
<li>
<a href="http://code.google.com/webtoolkit/gettingstarted.html">Getting Started Guide</a>
</li>
<li>
<a href="http://code.google.com/webtoolkit/documentation/examples/">Example Projects</a>
</li>
</ul>
<ul>
<li>
<a href="./com.google.gwt.doc.DeveloperGuide.html">Developer Guide</a>
</li>
<li>
<a class="selected" href="./gwt.html">Class Reference</a>
</li>
<li>
<a href="http://code.google.com/webtoolkit/issues/">Issue Tracking</a>
</li>
<li>
<a href="http://groups.google.com/group/Google-Web-Toolkit">Developer Forum</a>
</li>
</ul>
<ul>
<li>
<a href="http://googlewebtoolkit.blogspot.com/">GWT Blog</a>
</li>
<li>
<a href="http://code.google.com/webtoolkit/faq.html">GWT FAQ</a>
</li>
<li>
<a href="http://code.google.com/webtoolkit/makinggwtbetter.html">Making GWT Better</a>
</li>
</ul>
<ul>
<li>
<a href="http://code.google.com/webtoolkit/thirdparty.html">Third Party Tools</a>
</li>
</ul>
</div>
<div id="search">
<form action="http://www.google.com/search" method="get">
<div>
<input name="domains" value="code.google.com" type="hidden"><input name="sitesearch" value="code.google.com" type="hidden">
<div class="header">Search this site:</div>
<div class="input">
<input name="q" size="10">
</div>
<div class="button">
<input value="Search" type="submit">
</div>
</div>
</form>
</div>
</div>
<div xmlns="http://www.w3.org/1999/xhtml" id="body">
<h1>Interface Constants</h1>
<div class="classSig">public 
            interface 
            <b>Constants</b>
<br>extends 
                <a xmlns="" href="com.google.gwt.i18n.client.Localizable.html">Localizable</a>
<br>
<br>// Extended by <code><a href="com.google.gwt.i18n.client.ConstantsWithLookup.html">ConstantsWithLookup</a></code>
</div>A tag interface that facilitates locale-sensitive, compile-time binding of
 constant values supplied from properties files. Using
 <code>GWT.create(<i>class</i>)</code> to "instantiate" an interface that
 extends <code>Constants</code> returns an instance of an automatically
 generated subclass that is implemented using values from a property file
 selected based on locale.
 
 <p>
 Locale is specified at run time using a meta tag or query string as described
 for <a href="com.google.gwt.i18n.client.Localizable.html">Localizable</a>.
 </p>
<h3>Extending <code>Constants</code>
</h3>
 To use <code>Constants</code>, begin by defining an interface that extends
 it. Each interface method is referred to as a <i>constant accessor</i>, and
 the name of each constant accessor is assumed to match the name of a property
 defined in a properties file. For example,
 
 <pre class="code">public interface NumberFormatConstants extends Constants {
  /**
   * @return the localized decimal separator
   */
  String decimalSeparator();

  /**
   * @return the localized thousands separator
   */
  String thousandsSeparator();
}
</pre>

 
 expects to find properties named <code>decimalSeparator</code> and
 <code>thousandsSeparator</code> in an associated properties file. For
 example, the following properties would be used for a German locale:
 
 <pre class="code">decimalSeparator = ,
thousandsSeparator = .
</pre>
<p>
 The following example demonstrates how to use constant accessors defined in
 the interface above:
 
 <pre class="code">public void useNumberFormatConstants() {
  NumberFormatConstants constants = (NumberFormatConstants) GWT.create(NumberFormatConstants.class);
  String decimalSep = constants.decimalSeparator();
  String thousandsSep = constants.thousandsSeparator();
  String msg = "Decimals are separated using '" + decimalSep + "'";
  msg += ", and thousands are separated using '" + thousandsSep + "'";
  showMessage(msg);
}
</pre>
</p>
<p>
 It is also possible to change the property name bound to a constant accessor
 using the <code>gwt.key</code> doc comment. For example,
 <pre class="code">public interface NumberFormatConstantsWithAltKey extends Constants {
  /**
   * @gwt.key fmt.sep.decimal
   * @return the localized decimal separator
   */
  String decimalSeparator();

  /**
   * @gwt.key fmt.sep.thousands
   * @return the localized thousands separator
   */
  String thousandsSeparator();
}
</pre>

 
 would match the names of the following properties:
 
 <pre class="code">fmt.sep.decimal = .
fmt.sep.thousands = ,
</pre>
</p>
<h3>Defining Constant Accessors</h3>
 Constant accessors must be of the form
 
 <pre>T methodName()</pre>
 
 where <code>T</code> is one of the return types in the following table:
 
 <table>
<tr>
<th><nobr>If the return type is...&nbsp;&nbsp;&nbsp;</nobr></th><th>The property value is interpreted as...</th>
</tr>
<tr>
<td><code>String</code></td><td>A plain string value</td>
</tr>
<tr>
<td><code>String[]</code></td><td>A comma-separated array of strings; use '<code>\\,</code>' to escape
 commas</td>
</tr>
<tr>
<td><code>int</code></td><td>An <code>int</code> value, checked during compilation</td>
</tr>
<tr>
<td><code>float</code></td><td>A <code>float</code> value, checked during compilation</td>
</tr>
<tr>
<td><code>double</code></td><td>A <code>double</code> value, checked during compilation</td>
</tr>
<tr>
<td><code>boolean</code></td><td>A <code>boolean</code> value ("true" or "false"), checked during
 compilation</td>
</tr>
<tr>
<td><code>Map</code></td><td>A comma-separated list of property names, each of which is a key into a
 generated map; the value mapped to given key is the value of the property
 having named by that key</td>
</tr>
</table>
 
 As an example of a <code>Map</code>, for the following property file:
 
 <pre>
 a = X
 b = Y
 c = Z
 someMap = a, b, c
 </pre>
 
 the constant accessor <code>someMap()</code> would return a
 <code>Map</code> that maps <code>"a"</code> onto <code>"X"</code>,
 <code>"b"</code> onto <code>"Y"</code>, and <code>"c"</code> onto
 <code>"Z"</code>.
 
 <h3>Binding to Properties Files</h3>
 If an interface <code>org.example.foo.Intf</code> extends
 <code>Constants</code> and the following code is used to create an object
 from <code>Intf</code> as follows:
 
 <pre class="code">Intf constants = (Intf)GWT.create(Intf.class);</pre>
 
 then <code>constants</code> will be assigned an instance of a generated
 class whose constant accessors are implemented by extracting values from a
 set of matching properties files. Property values are sought using a
 best-match algorithm, and candidate properties files are those which (1)
 reside in the same package as the interface (<code>org/example/foo/</code>),
 (2) have a base filename matching the interface name (<code>Intf</code>),
 and (3) have a suffix that most closely matches the locale. Suffixes are
 matched as follows:
 
 <table>
<tr>
<th align="left"><nobr>If <code>locale</code> is...&nbsp;&nbsp;</nobr></th><th align="left">The properties file that binds to
 <code>org.example.foo.Intf</code> is...</th>
</tr>
<tr>
<td><i>unspecified</i></td><td><code>org/example/foo/Intf.properties</code></td>
</tr>
<tr>
<td><code>x</code></td><td><code>org/example/foo/Intf_x.properties</code> if it exists and
 defines the property being sought, otherwise treated as if
 <code>locale</code> were <i>unspecified</i></td>
</tr>
<tr>
<td><code>x_Y</code></td><td><code>org/example/foo/Intf_x_Y.properties</code> if it exists and
 defines the property being sought, otherwise treated as if
 <code>locale</code> were <code>x</code></td>
</tr>
</table> where <code>x</code> and <code>Y</code> are language and locale
 codes, as described in the documentation for
 <a href="com.google.gwt.i18n.client.Localizable.html">Localizable</a>.
 
 <p>
 Note that the matching algorithm is applied independently for each constant
 accessor. It is therefore possible to create a hierarchy of related
 properties files such that an unlocalized properties file acts as a baseline,
 and locale-specific properties files may redefine a subset of those
 properties, relying on the matching algorithm to prefer localized properties
 while still finding unlocalized properties.
 </p>
<h3>Required Module</h3>
 Modules that use this interface should inherit
 <code>com.google.gwt.i18n.I18N</code>.
 
 <pre class="code">&lt;module&gt;
  &lt;!-- other inherited modules, such as com.google.gwt.user.User --&gt;
  &lt;inherits name="com.google.gwt.i18n.I18N"/&gt;
  &lt;!-- additional module settings --&gt;
&lt;/module&gt;
</pre>
<h3>Note</h3>
 You should not directly implement this interface or interfaces derived from
 it since an implementation is generated automatically when message interfaces
 are created using <a href="com.google.gwt.core.client.GWT.html#create(java.lang.Class)">GWT.create(Class)</a>.</div>
<div id="footer" xmlns="http://www.w3.org/1999/xhtml">
          &copy;2007 Google
          <span class="noprint">
            -
            <a href="http://www.google.com/">Google Home</a>
            -
            <a href="http://www.google.com/jobs/">We're Hiring</a>
            -
            <a href="http://www.google.com/privacy.html">Privacy Policy</a>
            -
            <a href="http://www.google.com/terms_of_service.html">Terms of Service</a>
            -
            <a href="mailto:code@google.com">Contact Us</a></span>
<div id="license" style="text-align: center; margin: 1em 0em 1em 0em">
            Except as otherwise
            <a href="http://code.google.com/policies.html#restrictions">noted</a>, the content of this  page is licensed under the  <a rel="license" href="http://creativecommons.org/licenses/by/2.5/">Creative Commons Attribution 2.5 License</a>.
              <!--
            <rdf:RDF xmlns="http://web.resource.org/cc/">
<Work rdf:about="">
<license rdf:resource="http://creativecommons.org/licenses/by/2.5/"></license>
</Work>
<License rdf:about="http://creativecommons.org/licenses/by/2.5/">
<permits rdf:resource="http://web.resource.org/cc/Reproduction"></permits>
<permits rdf:resource="http://web.resource.org/cc/Distribution"></permits>
<requires rdf:resource="http://web.resource.org/cc/Notice"></requires>
<requires rdf:resource="http://web.resource.org/cc/Attribution"></requires>
<permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"></permits>
</License>
</rdf:RDF>
              -->
            </div>
</div>
<script src="https://ssl.google-analytics.com/urchin.js" type="text/javascript" xmlns="http://www.w3.org/1999/xhtml"></script><script type="text/javascript">
          _uacct="UA-18071-1"; _uanchor=1; urchinTracker();
        </script>
</body>
</html>
